﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using estudent.ActionFilters;
using System.Text.RegularExpressions;
using estudent.Models;

namespace estudent.Controllers
{
    public class VpisniListController : Controller
    {


        estudentEnt db=null;//baza v bistvu

        //v bazi
        IEnumerable<string> drzave=null;//drzavce
        IEnumerable<SPoste> poste = null;//poste, rabimo instanco, ker potrebujemo oba atributa, tako številko kot pošto
        IEnumerable<string> obcine = null;
        IEnumerable<string> programiSmeri = null;
        IEnumerable<SModuli> moduli = null;
        IEnumerable<sPredmeti> prostoIzbPredmeti = null;
        IEnumerable<sPredmeti> strokovnoIzbPredmeti = null;
        IEnumerable<string> letniki = null;
        IEnumerable<string> vrsteVpisa = null;
        IEnumerable<VrstaStudija> vrsteStudija = null;

        IEnumerable<sPredmeti> predmeti = null;//izbrani predmeti iz modulov in iz prosto in strokovno izbirnih pri dolocanju izbirnega predmetnika


        //v aplikaciji
        //string[] letniki = new string[] { "1.letnik", "2.letnik", "3.letnik", "4.letnik", "5.letnik", "6.letnik","7. absolvent VSŠ", "8. absolvent UNI","9. absolvent MAG" };
        string[] naciniStudija=new string[]{"redni","izredni"};
        //string[] vrsteVpisa = new string[] { "prvi vpis v letnik", "ponavljanje letnika","absolvent","nadaljevanje letnika" };

        public VpisniListController()
        {
            //tukaj je potrebno dolocene stvari nafilat iz baze v select boxe v formularju vpisni list
            this.db = new estudentEnt();

            drzave = from d in db.SDrzaves
                     where d.veljavno == true || d.veljavno == null
                     orderby d.imeDrzava
                     select d.imeDrzava;

            poste = from p in db.SPostes
                    where p.veljavno != false || p.veljavno == null
                    orderby p.imePosta
                    select p;

            obcine = from o in db.SObcines
                     where o.veljavno != false || o.veljavno == null
                     orderby o.imeObcina
                     select o.imeObcina;

            programiSmeri = from p in db.SSmeris
                            where p.veljavnost == true || p.veljavnost == null
                            select p.imeSmer;

            moduli = from m in db.SModulis
                     where m.veljavnost == true || m.veljavnost == null
                     select m;

            prostoIzbPredmeti = from p in db.sPredmetis
                                where p.prostoIzbirni == true
                                select p;

            strokovnoIzbPredmeti = from s in db.sPredmetis
                                   where s.strokovnoIzbirni == true
                                   select s;
            
            letniki = from l in db.LetnikiStudijas
                      where l.veljavnost == true || l.veljavnost == null
                      select l.opisLetnika;

            vrsteVpisa = from v in db.VrsteVpisas
                         where v.veljavnost == true || v.veljavnost == null
                         select v.opisVrste;

            vrsteStudija = from v in db.VrstaStudijas
                           where v.veljavnost == true || v.veljavnost == null
                           select v;

        }

        //
        // GET: /VpisniList/
        public ActionResult Index()
        {
            
            ViewData["drzave"] = drzave;
            ViewData["obcine"] = obcine;
            ViewData["poste"] = poste;
            ViewData["programiSmeri"] = programiSmeri;
            ViewData["moduli"] = moduli;
            ViewData["prostoIzbPredmeti"] = prostoIzbPredmeti;
            ViewData["strokovnoIzbPredmeti"] = strokovnoIzbPredmeti;
            ViewData["letniki"] = letniki;
            ViewData["naciniStudija"] = naciniStudija;
            ViewData["vrsteVpisa"] = vrsteVpisa;
            ViewData["vrsteStudija"] = vrsteStudija;

            return View("VpisniList");
        }

        //POST: /VpisniList/Vnos
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Vnos(FormCollection form)
        {
            
            //validacija priimka
            if (form["priimek"].Trim().Length == 0)
                ModelState.AddModelError("priimek","Polje [priimek] je prazno.");
            else if ((!Regex.IsMatch(form["priimek"], @"^([A-Z]|[a-z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć| )+$")))
                ModelState.AddModelError("priimek", "Polje [priimek] mora biti sestavljeno samo iz črk.");
            else if ((!Regex.IsMatch(form["dpriimek"], @"^([A-Z]|[a-z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć| )*$")))
                ModelState.AddModelError("dpriimek", "Polje [dekliški priimek] mora biti sestavljeno samo iz črk.");

            //validacija imena
            if (form["ime"].Trim().Length == 0)
                ModelState.AddModelError("ime", "Polje [ime] je prazno.");
            else if ((!Regex.IsMatch(form["ime"], @"^([A-Z]|[a-z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć| )+$")))
                ModelState.AddModelError("ime", "Polje [ime] mora biti sestavljeno samo iz črk.");

            //validacija davcne
            if (form["davcna"].Trim().Length == 0)
                ModelState.AddModelError("davcna", "Polje [davčna številka] je prazno.");
            else if ((!Regex.IsMatch(form["davcna"], @"^[0-9]{8}$")))
                ModelState.AddModelError("davcna", "Polje [davčna številka] mora imeti 8 številk.");
            //validacije ulice
            if (form["ulica"].Trim().Length == 0)
                ModelState.AddModelError("ulica", "Polje [ulica] je prazno.");
            //validacije hisne stevilke
            if (form["hisna"].Trim().Length == 0)
                ModelState.AddModelError("hisna", "Polje [hišne številka] je prazno.");
            else if ((!Regex.IsMatch(form["hisna"], @"^([0-9]|[a-z]|[A-Z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć)+$")))
                ModelState.AddModelError("hisna", "Polje [hišna številka] mora imeti številke in črke.");
            //validacije telefona
            if (form["telefon"].Trim().Length == 0)
                ModelState.AddModelError("telefon", "Polje [telefon] je prazno.");
            else if ((!Regex.IsMatch(form["telefon"], @"^\+{0,1}([0-9]|\-| |\(|\))+$")))
                ModelState.AddModelError("telefon", "Polje [telefon] mora imeti številke.");
            //validacija email
            if (form["email"].Trim().Length == 0)
                ModelState.AddModelError("email", "Polje [email] je prazno.");
            else if ((!Regex.IsMatch(form["email"], @"^[a-z|A-Z|0-9|.|_|%|+|-]+@[A-Z|a-z|0-9|.|-]+\.[A-Z|a-z]{2,4}$")))
                ModelState.AddModelError("email", "Polje [email] ni v pravilnem formatu.");

            //validacija studijsko leto
            if ((!Regex.IsMatch(form["studijsko_leto"], @"^[0-9]{4}$")))
                ModelState.AddModelError("studijsko_leto", "Polje [študijsko leto] mora imeti 4 številke.");

            //validacija zacHisne
            if ((!Regex.IsMatch(form["hisnaZac"], @"^([0-9]|[a-z]|[A-Z])*$")))
                ModelState.AddModelError("hisnaZac", "Polje [začasna hišna številka] mora imeti številke in črke.");

            //emso validate
            checkCodeEMSO(form["emso"],form["drzava"]);


                //ce formular ni pravilno izpolnjen
            if (!ModelState.IsValid)
            {
                //populiramo nazaj polja, katera so bila vpisana
                for (int i = 0; i < form.Count; i++)
                {
                    ViewData[form.GetKey(i)] = form[i];

                }
                
                ViewData["drzave"] = drzave;//tudi drzave, ki so pa na voljo v listboxu
                ViewData["obcine"] = obcine;//in obcine
                ViewData["poste"] = poste;//in poste
                ViewData["programiSmeri"] = programiSmeri;//...
                ViewData["letniki"] = letniki;
                ViewData["naciniStudija"] = naciniStudija;
                ViewData["vrsteVpisa"] = vrsteVpisa;
                ViewData["vrsteStudija"] = vrsteStudija;
                ViewData["vrstaStudija"]=form["vrsta_studija"];
                ViewData["posebna_potreba"] = form["posebne_potrebe"];

                //gremo nazaj na formular
                return View("VpisniList");
            }
            else
            {
                string vpisna="";
                Vpisi vpis = new Vpisi();
                string izbirniPredmetnikCheckBox = form["izbirniPredmetnikCheck"];

                //pravilno izpolnjen formular
                try
                {
                    //dobit potrebno vpisno
                    DateTime lv=new DateTime(Convert.ToInt32(form["studijsko_leto"]),1,1);
                    string y=lv.Year.ToString().Substring(2);
                    string vpiZac="63"+y;

                    //dobimo vpisno ven maximalno
                    string user = (from st in db.Studentis
                                                   where st.username.StartsWith(vpiZac)
                                                   select st.username).Max();

                    
                    if (user != null)
                    {
                        int vp = Int32.Parse(user);
                        vp++;
                        vpisna = "" + vp;
                    }
                    else
                    {
                        vpisna = vpiZac + "0000";
                    }


                    Prijava prijava = new Prijava();
                    prijava.UpIme = vpisna;
                    prijava.Geslo = "student";
                    prijava.Vloga = "stud";
                    

                    Studenti student = new Studenti();
                    student.username = vpisna;
                    student.ime = form["ime"];
                    student.priimek = form["priimek"];
                    student.dpriimek=form["dpriimek"];
                    student.hisnaSt = form["hisna"];
                    student.ulica=form["ulica"];
                    student.davcnaStevilka = Convert.ToDecimal(form["davcna"]);
                    student.emso = Convert.ToDecimal(form["emso"]);
                    student.email=form["email"];
                    student.telefonskaSt = form["telefon"];
                    student.datumRojstva = new DateTime(Convert.ToInt32(form["emso"].Substring(4, 3)) + 1000, Convert.ToInt32(form["emso"].Substring(2, 2)), Convert.ToInt32(form["emso"].Substring(0, 2)));

                    decimal sp=Convert.ToDecimal(form["posta"].Substring(form["posta"].Length-4));
                    SPoste posta = db.SPostes.First(p=>p.sPosta == sp);
                    posta.Studentis.Add(student);
                    //student.sPosta = posta.sPosta;

                    string ob=form["obcina"];
                    SObcine obcina = db.SObcines.First(o=>o.imeObcina == ob);
                    obcina.Studentis.Add(student);
                    //student.sObcina = obcina.sObcina;

                    string drz=form["drzava"];
                    SDrzave drzava = db.SDrzaves.First(d=>d.imeDrzava == drz);
                    drzava.Studentis.Add(student);
                    //student.sDrzava = drzava.sDrzava;

                    //zacasne
                    student.zacasnaUlica = null;
                    if (form["ulicaZac"] != null && form["ulicaZac"].Length!=0)
                        student.zacasnaUlica=form["ulicaZac"];
                    student.zacasnaHisnaSt = null;
                    if(form["hisnaZac"]!=null && form["hisnaZac"].Length!=0)
                        student.zacasnaHisnaSt = form["hisnaZac"];

                    student.SOb_sObcina = null;
                    if (form["obcinaZac"] != null && form["obcinaZac"].Length != 0)
                    {
                        string zacObc=form["obcinaZac"];
                        SObcine obcinaZac = db.SObcines.First(o=>o.imeObcina == zacObc);
                        obcinaZac.Studentis1.Add(student);
                        //student.SOb_sObcina = obcinaZac.sObcina;

                    }

                    student.SPo_sPosta = null;
                    if (form["postaZac"] != null && form["postaZac"].Length != 0)
                    {
                        decimal spZac = Convert.ToDecimal(form["postaZac"].Substring(form["postaZac"].Length - 4));
                        SPoste postaZac = db.SPostes.First(p => p.sPosta == spZac);
                        postaZac.Studentis1.Add(student);
                        //student.SPo_sPosta = postaZac.sPosta;
                    }

                    student.posebnaPotreba = form["posebne_potrebe"];

                    //še vpis
                    

                    vpis.username = vpisna;
                    vpis.letoVpisa = new DateTime(Convert.ToInt32(form["studijsko_leto"]),10,1);
                    vpis.skupina=form["skupine"];
                    vpis.seStudira = "ja";
                    vpis.idVrstaStudija=form["vrsta_studija"];
                    
                    if (form["nacin_studija"].CompareTo("redni") == 0)
                        vpis.redni = true;
                    else
                        vpis.redni = false;

                    string sm=form["studijskiProgramSmer"];
                    SSmeri smer = db.SSmeris.First(s=>s.imeSmer == sm);
                    smer.Vpisis.Add(vpis);//nastavimo tuji kljuc vpisu

                    vpis.krajIzvajanja=form["kraj_studija"];
                    vpis.zavod=form["dodatni_zavod"];

                    string vrs=form["vrsta_vpisa"];
                    VrsteVpisa vrsta = db.VrsteVpisas.First(v=>v.opisVrste == vrs);
                    vrsta.Vpisis.Add(vpis);
                    //vpis.idVrstaVpisa = vrsta.idVrstaVpisa;

                    string let=form["letnik_studija"];
                    LetnikiStudija letnik = db.LetnikiStudijas.First(l=>l.opisLetnika == let);
                    letnik.Vpisis.Add(vpis);
                    //vpis.idLetnikStudija = letnik.idLetnikStudija;


                    db.AddToPrijavas(prijava);//dodana prijava
                    db.AddToStudentis(student);//dodan student
                    db.AddToVpisis(vpis);//dodan vpis


                    //povezat obvezne predmete z vpisom
                    IEnumerable<sPredmeti> obvezniPredmeti = from o in db.ObvezenPredmets
                                                             join p in db.sPredmetis on o.sPredmeta equals p.sPredmeta
                                                             where o.idLetnikStudija == letnik.idLetnikStudija && o.sSmer == smer.sSmer && p.obvezni==true
                                                             select p;
                    foreach (sPredmeti pred in obvezniPredmeti)
                    {
                        pred.Vpisis.Add(vpis);
                        vpis.sPredmetis.Add(pred);
                    }
                    /////////////////////////////////////


                    db.SaveChanges();
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc.Message);
                    
                    ViewData["uspeh"]=false;//da view ve, kaj pokazat
                    ViewData["odziv"] = "Študent se ni shranil v bazo.";

                    return View("Odziv");
                }
                ViewData["vpisna"] = vpisna;
                ViewData["vpisid"] = vpis.idVpisa;
                ViewData["uspeh"] = true;//da view ve, kaj pokazat
                ViewData["odziv"] = "Študent "+form["ime"]+" "+form["priimek"]+" z vpisno številko ("+vpisna+") se je uspešno shranil v bazo.";

                if (izbirniPredmetnikCheckBox != null)
                {//potrebno dolocit se izbirni predmetnik, ce je checkan
                    ViewData["moduli"] = moduli;
                    ViewData["prosti"] = prostoIzbPredmeti;
                    ViewData["strokovni"] = strokovnoIzbPredmeti;
                    return View("IzbirniPredmetnik");
                }

                return View("Odziv");
            }
            
        }

        [NonAction]
        private void checkCodeEMSO(string emso, string drzava)
        {

            if (emso.Length == 13)
            {
                if (Regex.IsMatch(emso,@"^[0-9]{13}$"))
                {

                    if (drzava.ToLower().CompareTo("slovenija")==0)
                    {

                        int[] s = new int[13];
                        int vsota = 0;
                        for (int i = 7; i >= 2; i--)
                        {
                            s[7 - i] = Int32.Parse(emso[7 - i]+"") * i;
                            s[13 - i] = Int32.Parse(emso[13 - i]+"") * i;
                            vsota += s[7 - i] + s[13 - i];
                        }
                        var control = 0;
                        if (vsota % 11 != 0)
                            control = 11 - (vsota % 11);
                        if (control != Int32.Parse(emso[12]+""))
                            ModelState.AddModelError("emso", "Polje [EMŠO] je napačno zapisano, prosimo, če jo znova preverite.");
                    }
                    else
                    {
                        if (!Regex.IsMatch(emso, @"^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[012])([0-9][0-9][0-9])000000$"))
                            ModelState.AddModelError("emso","Polje [EMŠO] je napačno zapisano, tujci imajo zapisano samo datum rojstva v zapisu, ostale številke so 0.");
                    }

                }
                else
                    ModelState.AddModelError("emso","Polje [EMŠO] vsebuje 13 številk.");
            }
            else
                ModelState.AddModelError("emso","Polje [EMŠO] vsebuje 13 številk.");
        }

        //GET VpisniList/Uredi/id=username=vpisna/id=od vpisa

        public ActionResult Uredi(string id, string idVpis)
        {
            //ce ni dolocenega studenta, vrnit potrebno view, s katerim ga najdemo
            if (id == null)
            {
                ViewData["navodilo"]="Poiščite študenta, kateremu želite urejati vpisni list in izbirni predmetnik.";
                ViewData["namen"] = "urejanjeVpisnegaLista";
                return View("IskanjeStudent");
            }

            ViewData["drzave"] = drzave;
            ViewData["obcine"] = obcine;
            ViewData["poste"] = poste;
            ViewData["programiSmeri"] = programiSmeri;
            

            ViewData["letniki"] = letniki;
            ViewData["naciniStudija"] = naciniStudija;
            ViewData["vrsteVpisa"] = vrsteVpisa;
            ViewData["vrsteStudija"] = vrsteStudija;


            //dobimo iz vpisne vse mozne podatke
            Studenti student = db.Studentis.FirstOrDefault(s=>s.username == id);
            if (student != null)
            {
                ViewData["ime"] = student.ime;
                ViewData["priimek"] = student.priimek;
                ViewData["dpriimek"] = student.dpriimek;
                ViewData["vpisna"] = student.username;
                ViewData["emso"] = student.emso+"";
                ViewData["davcna"] = student.davcnaStevilka+"";
                ViewData["ulica"]=student.ulica;
                ViewData["hisna"]=student.hisnaSt+"";
                ViewData["posta"]=student.SPoste.imePosta+" "+student.SPoste.sPosta;
                ViewData["obcina"]=student.SObcine.imeObcina;
                ViewData["drzava"]=student.SDrzave.imeDrzava;
                ViewData["email"]=student.email;
                ViewData["telefon"]=student.telefonskaSt+"";
                ViewData["ulicaZac"]=student.zacasnaUlica;
                ViewData["hisnaZac"]=student.zacasnaHisnaSt+"";
                ViewData["postaZac"]=(student.SPoste1==null) ? "" : student.SPoste1.imePosta+" "+student.SPoste1.sPosta;
                ViewData["obcinaZac"]=(student.SObcine1==null) ? "" : student.SObcine1.imeObcina;
                ViewData["posebna_potreba"] = student.posebnaPotreba;
                
                

                if (idVpis == null)//ce niamo izbranega vpisa
                {
                    IEnumerable<Vpisi> njegoviVpisi = student.Vpisis.OrderBy(v=>v.letoVpisa);
                    ViewData["studentoviVpisi"] = njegoviVpisi;
                    
                    return View("VpisniListiStudenta");
                }


                //imamo izbran vpis
                decimal stV=decimal.Parse(idVpis);
                Vpisi studentovVpis = student.Vpisis.FirstOrDefault(v=>v.idVpisa ==stV);

                if (studentovVpis != null)
                {
                    ViewData["vpisid"] = studentovVpis.idVpisa+"";//za akcijo vnos, da bomo vedeli da gre za spreminjanje vpisa
                    ViewData["studentid"] = student.username;

                    //da nafilamo se vpisne podatke
                    ViewData["studijskiProgramSmer"]=studentovVpis.SSmeri.imeSmer;
                    ViewData["studijsko_leto"]=studentovVpis.letoVpisa.Year;
                    ViewData["letnik_studija"]=studentovVpis.LetnikiStudija.opisLetnika;
                    ViewData["nacin_studija"]=(studentovVpis.redni==true) ? "redni" : "izredni";
                    ViewData["vrsta_vpisa"] = studentovVpis.VrsteVpisa.opisVrste;
                    ViewData["moduli"] = moduli;
                    ViewData["prosti"] = prostoIzbPredmeti;
                    ViewData["strokovni"] = strokovnoIzbPredmeti;
                    ViewData["skupine"] = studentovVpis.skupina;
                    ViewData["vrstaStudija"] = studentovVpis.idVrstaStudija;
                    ViewData["kraj_studija"] = studentovVpis.krajIzvajanja;
                    ViewData["dodatni_zavod"] = studentovVpis.zavod;

                    return View("VpisniListUredi");

                }
                else
                {
                    return Content("Napaka v poizvedbi baze.");
                }


            }
            else
            {
                return Content("Napaka v poizvedbi baze.");
            }

        }


        //dejanska post akcija, ki vnese popravke v tabelo
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Uredi(FormCollection form)
        {

            //validacija priimka
            if (form["priimek"].Trim().Length == 0)
                ModelState.AddModelError("priimek", "Polje [priimek] je prazno.");
            else if ((!Regex.IsMatch(form["priimek"], @"^([A-Z]|[a-z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć)+$")))
                ModelState.AddModelError("priimek", "Polje [priimek] mora biti sestavljeno samo iz črk.");
            else if ((!Regex.IsMatch(form["dpriimek"], @"^([A-Z]|[a-z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć| )*$")))
                ModelState.AddModelError("dpriimek", "Polje [dekliški priimek] mora biti sestavljeno samo iz črk.");
            //validacija imena
            if (form["ime"].Trim().Length == 0)
                ModelState.AddModelError("ime", "Polje [ime] je prazno.");
            else if ((!Regex.IsMatch(form["ime"], @"^([A-Z]|[a-z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć)+$")))
                ModelState.AddModelError("ime", "Polje [ime] mora biti sestavljeno samo iz črk.");

            //validacija davcne
            if (form["davcna"].Trim().Length == 0)
                ModelState.AddModelError("davcna", "Polje [davčna številka] je prazno.");
            else if ((!Regex.IsMatch(form["davcna"], @"^[0-9]{8}$")))
                ModelState.AddModelError("davcna", "Polje [davčna številka] mora imeti 8 številk.");
            //validacije ulice
            if (form["ulica"].Trim().Length == 0)
                ModelState.AddModelError("ulica", "Polje [ulica] je prazno.");
            //validacije hisne stevilke
            if (form["hisna"].Trim().Length == 0)
                ModelState.AddModelError("hisna", "Polje [hišne številka] je prazno.");
            else if ((!Regex.IsMatch(form["hisna"], @"^([0-9]|[a-z]|[A-Z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć)+$")))
                ModelState.AddModelError("hisna", "Polje [hišna številka] mora imeti številke in črke.");
            //validacije telefona
            if (form["telefon"].Trim().Length == 0)
                ModelState.AddModelError("telefon", "Polje [telefon] je prazno.");
            else if ((!Regex.IsMatch(form["telefon"], @"^\+{0,1}([0-9]|\-| |\(|\))+$")))
                ModelState.AddModelError("telefon", "Polje [telefon] mora imeti številke.");
            //validacija email
            if (form["email"].Trim().Length == 0)
                ModelState.AddModelError("email", "Polje [email] je prazno.");
            else if ((!Regex.IsMatch(form["email"], @"^[a-z|A-Z|0-9|.|_|%|+|-]+@[A-Z|a-z|0-9|.|-]+\.[A-Z|a-z]{2,4}$")))
                ModelState.AddModelError("email", "Polje [email] ni v pravilnem formatu.");

            //validacija studijsko leto
            if ((!Regex.IsMatch(form["studijsko_leto"], @"^[0-9]{4}$")))
                ModelState.AddModelError("studijsko_leto", "Polje [študijsko leto] mora imeti 4 številke.");

            //validacija zacHisne
            if ((!Regex.IsMatch(form["hisnaZac"], @"^([0-9]|[a-z]|[A-Z])*$")))
                ModelState.AddModelError("hisnaZac", "Polje [začasna hišna številka] mora imeti številke in črke.");

            //emso validate
            checkCodeEMSO(form["emso"], form["drzava"]);


            //ce formular ni pravilno izpolnjen
            if (!ModelState.IsValid)
            {
                //populiramo nazaj polja, katera so bila vpisana
                for (int i = 0; i < form.Count; i++)
                {
                    ViewData[form.GetKey(i)] = form[i];

                }

                ViewData["drzave"] = drzave;//tudi drzave, ki so pa na voljo v listboxu
                ViewData["obcine"] = obcine;//in obcine
                ViewData["poste"] = poste;//in poste
                ViewData["programiSmeri"] = programiSmeri;//...
                ViewData["letniki"] = letniki;
                ViewData["naciniStudija"] = naciniStudija;
                ViewData["vrsteVpisa"] = vrsteVpisa;
                ViewData["vrsteStudija"] = vrsteStudija;
                ViewData["vrstaStudija"] = form["vrsta_studija"];
                ViewData["posebna_potreba"]=form["posebne_potrebe"];

                //gremo nazaj na formular
                return View("VpisniListUredi");
            }



            string username=form["studentid"];
            decimal vpisId=decimal.Parse(form["vpisid"]);

            Studenti student = db.Studentis.FirstOrDefault(s=>s.username == username);//dobimo studentica

            if (student != null)
            {
                student.ime = form["ime"];
                student.priimek = form["priimek"];
                student.dpriimek=form["dpriimek"];
                student.hisnaSt = form["hisna"];
                student.ulica = form["ulica"];
                student.davcnaStevilka = Convert.ToDecimal(form["davcna"]);
                student.emso = Convert.ToDecimal(form["emso"]);
                student.email = form["email"];
                student.telefonskaSt = form["telefon"];
                student.datumRojstva = new DateTime(Convert.ToInt32(form["emso"].Substring(4, 3)) + 1000, Convert.ToInt32(form["emso"].Substring(2, 2)), Convert.ToInt32(form["emso"].Substring(0, 2)));
                decimal sp = Convert.ToDecimal(form["posta"].Substring(form["posta"].Length - 4));
                SPoste posta = db.SPostes.First(p => p.sPosta == sp);
                posta.Studentis.Add(student);
                //student.sPosta = posta.sPosta;

                string ob = form["obcina"];
                SObcine obcina = db.SObcines.First(o => o.imeObcina == ob);
                obcina.Studentis.Add(student);
                //student.sObcina = obcina.sObcina;

                string drz = form["drzava"];
                SDrzave drzava = db.SDrzaves.First(d => d.imeDrzava == drz);
                drzava.Studentis.Add(student);
                //student.sDrzava = drzava.sDrzava;

                //zacasne
                student.zacasnaUlica = null;
                if (form["ulicaZac"] != null && form["ulicaZac"].Length != 0)
                    student.zacasnaUlica = form["ulicaZac"];
                student.zacasnaHisnaSt = null;
                if (form["hisnaZac"] != null && form["hisnaZac"].Length != 0)
                    student.zacasnaHisnaSt = form["hisnaZac"];

                student.SOb_sObcina = null;
                if (form["obcinaZac"] != null && form["obcinaZac"].Length != 0)
                {
                    string zacObc = form["obcinaZac"];
                    SObcine obcinaZac = db.SObcines.First(o => o.imeObcina == zacObc);
                    obcinaZac.Studentis1.Add(student);
                    //student.SOb_sObcina = obcinaZac.sObcina;

                }

                student.SPo_sPosta = null;
                if (form["postaZac"] != null && form["postaZac"].Length != 0)
                {
                    decimal spZac = Convert.ToDecimal(form["postaZac"].Substring(form["postaZac"].Length - 4));
                    SPoste postaZac = db.SPostes.First(p => p.sPosta == spZac);
                    postaZac.Studentis1.Add(student);
                    //student.SPo_sPosta = postaZac.sPosta;
                }

                student.posebnaPotreba =form["posebne_potrebe"];

                //se vpis
                Vpisi vpis = student.Vpisis.FirstOrDefault(v=>v.idVpisa == vpisId);
                if (vpis != null)
                {
                    bool aliJePrisloDoSpremembeVpisa = false;
                    if (vpis.letoVpisa.Year != new DateTime(Convert.ToInt32(form["studijsko_leto"]), 10, 1).Year)
                        aliJePrisloDoSpremembeVpisa = true;

                    vpis.letoVpisa = new DateTime(Convert.ToInt32(form["studijsko_leto"]), 10, 1);
                    vpis.skupina = form["skupine"];
                    //ali se je uporabnik odlocil za dolocitev predmetnika
                    string izbirniPredmetnikCheckBox = form["izbirniPredmetnikCheck"];
                    vpis.seStudira = "ja";
                    vpis.idVrstaStudija = form["vrsta_studija"];
                    if (form["nacin_studija"].CompareTo("redni") == 0)
                        vpis.redni = true;
                    else
                        vpis.redni = false;

                    if(vpis.SSmeri.imeSmer.CompareTo(form["studijskiProgramSmer"])!=0)
                        aliJePrisloDoSpremembeVpisa = true;
                    string sm = form["studijskiProgramSmer"];
                    SSmeri smer = db.SSmeris.First(s => s.imeSmer == sm);
                    smer.Vpisis.Add(vpis);//nastavimo tuji kljuc vpisu

                    vpis.krajIzvajanja = form["kraj_studija"];
                    vpis.zavod=form["dodatni_zavod"];

                    string vrs = form["vrsta_vpisa"];
                    VrsteVpisa vrsta = db.VrsteVpisas.First(v => v.opisVrste == vrs);
                    vrsta.Vpisis.Add(vpis);
                    //vpis.idVrstaVpisa = vrsta.idVrstaVpisa;

                    string let = form["letnik_studija"];
                    LetnikiStudija letnik = db.LetnikiStudijas.First(l => l.opisLetnika == let);
                    letnik.Vpisis.Add(vpis);

                    if (aliJePrisloDoSpremembeVpisa)
                    {
                        Vpisi dvojniVpis = db.Vpisis.FirstOrDefault(v => v.letoVpisa.Year == vpis.letoVpisa.Year && v.sSmer == vpis.sSmer && v.username == vpis.username);
                        if (dvojniVpis != null)
                        {
                            ViewData["uspeh"] = false;
                            ViewData["odziv"] = "Študent se ni posodobil. Študent ima že zabeležen vpis leta " + vpis.letoVpisa.Year + " na smer " + vpis.SSmeri.imeSmer + ".";

                            return View("Odziv");
                        }
                    }

                    try
                    {

                        //resetirat obvezne predmete, mogoce je prislo do spremembe samega programa in smeri ter letnika
                        IEnumerable<sPredmeti> prejsnjiObv = vpis.sPredmetis.Where(p=>p.obvezni==true);
                        
                        List<sPredmeti> prejs=prejsnjiObv.ToList<sPredmeti>();

                        for (int i = 0; i < prejs.Count; i++ )
                        {
                            prejs[i].Vpisis.Remove(vpis);
                        }
                        
                            

                        //povezat obvezne predmete z vpisom
                        IEnumerable<sPredmeti> obvezniPredmeti = from o in db.ObvezenPredmets
                                                                    join p in db.sPredmetis on o.sPredmeta equals p.sPredmeta
                                                                    where o.idLetnikStudija == letnik.idLetnikStudija && o.sSmer == smer.sSmer && p.obvezni == true
                                                                    select p;


                        foreach (sPredmeti pred in obvezniPredmeti)
                        {
                            pred.Vpisis.Add(vpis);
                            vpis.sPredmetis.Add(pred);
                        }
                        /////////////////////////////////////


                        db.SaveChanges();

                        ViewData["vpisna"] = vpis.username;
                        ViewData["vpisid"] = vpis.idVpisa;

                        ViewData["uspeh"] = true;
                        ViewData["odziv"] = "Študent se je uspešno posodobil v bazi.";

                        if (izbirniPredmetnikCheckBox != null)
                        {
                            //potrebno dolocit se izbirni predmetnik, ce je checkan
                            ViewData["moduli"] = moduli;
                            ViewData["prosti"] = prostoIzbPredmeti;
                            ViewData["strokovni"] = strokovnoIzbPredmeti;

                            //podat mu ze mogoce znane izbire
                            IEnumerable<sPredmeti> studentoviModulskiPredmeti = (vpis.sPredmetis.Where(p=>p.sModula != null)).OrderBy(p=>p.sModula);
                            int stevec = 1;
                            foreach (var predmet in studentoviModulskiPredmeti)
                            {
                                if(stevec<=3)
                                    ViewData["modul1"] += predmet.imePredmeta + "<input type='hidden' name='"+ predmet.sPredmeta.ToString() + "'><br/>";
                                else
                                    ViewData["modul2"] += predmet.imePredmeta + "<input type='hidden' name='"+ predmet.sPredmeta.ToString() + "'><br/>";
                                stevec++;
                            }

                            IEnumerable<sPredmeti> studentoviStrokovniPredmeti = vpis.sPredmetis.Where(p=>p.strokovnoIzbirni==true);
                            IEnumerable<sPredmeti> studentoviProstiPredmeti = vpis.sPredmetis.Where(p => p.prostoIzbirni == true);

                            ViewData["strokovni"]=strokovnoIzbPredmeti.Except(studentoviStrokovniPredmeti);
                            ViewData["prosti"] = prostoIzbPredmeti.Except(studentoviProstiPredmeti);

                            foreach (var predmet in studentoviProstiPredmeti)
                            {
                                
                                ViewData["prostoIzbrani"] += "<option value='" + predmet.sPredmeta.ToString() + "'>" + predmet.imePredmeta + "</option>";
                                ViewData["finta"] += "<input type='hidden' name='" + predmet.sPredmeta.ToString() + "'/>";
                            }
                            foreach (var predmet in studentoviStrokovniPredmeti)
                            {
                                ViewData["strokovnoIzbrani"] += "<option value='" + predmet.sPredmeta.ToString() + "'>" + predmet.imePredmeta + "</option>";
                                ViewData["finta"] += "<input type='hidden' name='" + predmet.sPredmeta.ToString() + "'/>";
                            }

                            return View("IzbirniPredmetnik");
                        }

                        return View("Odziv");
                    }
                    catch (Exception e)
                    { 
                        ViewData["uspeh"] = false;
                        ViewData["odziv"] = "Študent se ni posodobil v bazi.";

                        return View("Odziv");

                    }

                }
            }

            return Content("Napaka pri poizvedbi baze.");

        }


        //dodamo vpisni list že obstojecemu studentu
        //id je username od studenta
        public ActionResult Dodaj(string id)
        {
            if (id == null)
            {
                ViewData["navodilo"] = "Poiščite študenta, kateremu želite dodati nov vpis in izbirni predmetnik.(recimo vpis v višji letnik)";
                ViewData["namen"] = "dodajanjeVpisnegaLista";
                return View("IskanjeStudent");
            }

            Studenti student = db.Studentis.FirstOrDefault(s=>s.username==id);
            ViewData["ime"] = student.ime;
            ViewData["priimek"] = student.priimek;
            ViewData["dpriimek"] = student.dpriimek;
            ViewData["vpisna"] = student.username;

            ViewData["studentoviVpisi"] = student.Vpisis.OrderBy(v=>v.letoVpisa);

            //studentovi podatki
            ViewData["drzave"] = drzave;
            ViewData["obcine"] = obcine;
            ViewData["poste"] = poste;

            ViewData["emso"] = student.emso + "";
            ViewData["davcna"] = student.davcnaStevilka + "";
            ViewData["ulica"] = student.ulica;
            ViewData["hisna"] = student.hisnaSt + "";
            ViewData["posta"] = student.SPoste.imePosta + " " + student.SPoste.sPosta;
            ViewData["obcina"] = student.SObcine.imeObcina;
            ViewData["drzava"] = student.SDrzave.imeDrzava;
            ViewData["email"] = student.email;
            ViewData["telefon"] = student.telefonskaSt + "";
            ViewData["ulicaZac"] = student.zacasnaUlica;
            ViewData["hisnaZac"] = student.zacasnaHisnaSt + "";
            ViewData["postaZac"] = (student.SPoste1 == null) ? "" : student.SPoste1.imePosta + " " + student.SPoste1.sPosta;
            ViewData["obcinaZac"] = (student.SObcine1 == null) ? "" : student.SObcine1.imeObcina;
            ViewData["posebna_potreba"] = student.posebnaPotreba;

            //

            ViewData["programiSmeri"] = programiSmeri;
            ViewData["moduli"] = moduli;
            ViewData["prostoIzbPredmeti"] = prostoIzbPredmeti;
            ViewData["strokovnoIzbPredmeti"] = strokovnoIzbPredmeti;
            ViewData["letniki"] = letniki;
            ViewData["naciniStudija"] = naciniStudija;
            ViewData["vrsteVpisa"] = vrsteVpisa;
            ViewData["vrsteStudija"] = vrsteStudija;

            ViewData["studentid"] = id;
            return View("VpisniListDodaj");
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Dodaj(FormCollection form)
        {
            //validacija priimka
            if (form["priimek"].Trim().Length == 0)
                ModelState.AddModelError("priimek", "Polje [priimek] je prazno.");
            else if ((!Regex.IsMatch(form["priimek"], @"^([A-Z]|[a-z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć)+$")))
                ModelState.AddModelError("priimek", "Polje [priimek] mora biti sestavljeno samo iz črk.");
            else if ((!Regex.IsMatch(form["dpriimek"], @"^([A-Z]|[a-z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć| )*$")))
                ModelState.AddModelError("dpriimek", "Polje [dekliški priimek] mora biti sestavljeno samo iz črk.");
            //validacija imena
            if (form["ime"].Trim().Length == 0)
                ModelState.AddModelError("ime", "Polje [ime] je prazno.");
            else if ((!Regex.IsMatch(form["ime"], @"^([A-Z]|[a-z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć)+$")))
                ModelState.AddModelError("ime", "Polje [ime] mora biti sestavljeno samo iz črk.");

            //validacija davcne
            if (form["davcna"].Trim().Length == 0)
                ModelState.AddModelError("davcna", "Polje [davčna številka] je prazno.");
            else if ((!Regex.IsMatch(form["davcna"], @"^[0-9]{8}$")))
                ModelState.AddModelError("davcna", "Polje [davčna številka] mora imeti 8 številk.");
            //validacije ulice
            if (form["ulica"].Trim().Length == 0)
                ModelState.AddModelError("ulica", "Polje [ulica] je prazno.");
            //validacije hisne stevilke
            if (form["hisna"].Trim().Length == 0)
                ModelState.AddModelError("hisna", "Polje [hišne številka] je prazno.");
            else if ((!Regex.IsMatch(form["hisna"], @"^([0-9]|[a-z]|[A-Z]|Š|Č|Ž|š|č|ž|Đ|đ|ć|Ć)+$")))
                ModelState.AddModelError("hisna", "Polje [hišna številka] mora imeti številke in črke.");
            //validacije telefona
            if (form["telefon"].Trim().Length == 0)
                ModelState.AddModelError("telefon", "Polje [telefon] je prazno.");
            else if ((!Regex.IsMatch(form["telefon"], @"^\+{0,1}([0-9]|\-| |\(|\))+$")))
                ModelState.AddModelError("telefon", "Polje [telefon] mora imeti številke.");
            //validacija email
            if (form["email"].Trim().Length == 0)
                ModelState.AddModelError("email", "Polje [email] je prazno.");
            else if ((!Regex.IsMatch(form["email"], @"^[a-z|A-Z|0-9|.|_|%|+|-]+@[A-Z|a-z|0-9|.|-]+\.[A-Z|a-z]{2,4}$")))
                ModelState.AddModelError("email", "Polje [email] ni v pravilnem formatu.");

            //validacija studijsko leto
            if ((!Regex.IsMatch(form["studijsko_leto"], @"^[0-9]{4}$")))
                ModelState.AddModelError("studijsko_leto", "Polje [študijsko leto] mora imeti 4 številke.");

            //validacija zacHisne
            if ((!Regex.IsMatch(form["hisnaZac"], @"^([0-9]|[a-z]|[A-Z])*$")))
                ModelState.AddModelError("hisnaZac", "Polje [začasna hišna številka] mora imeti številke in črke.");

            //emso validate
            checkCodeEMSO(form["emso"], form["drzava"]);

            
            string username = form["studentid"];
            Studenti student = db.Studentis.FirstOrDefault(s=>s.username==username);    
        
            //ce formular ni pravilno izpolnjen
            if (!ModelState.IsValid)
            {
                //populiramo nazaj polja, katera so bila vpisana
                for (int i = 0; i < form.Count; i++)
                {
                    ViewData[form.GetKey(i)] = form[i];

                }

                ViewData["drzave"] = drzave;//tudi drzave, ki so pa na voljo v listboxu
                ViewData["obcine"] = obcine;//in obcine
                ViewData["poste"] = poste;//in poste
                ViewData["programiSmeri"] = programiSmeri;//...
                ViewData["letniki"] = letniki;
                ViewData["naciniStudija"] = naciniStudija;
                ViewData["vrsteVpisa"] = vrsteVpisa;
                ViewData["vrsteStudija"] = vrsteStudija;
                ViewData["vrstaStudija"] = form["vrsta_studija"];
                ViewData["posebna_potreba"] = form["posebne_potrebe"];

                ViewData["studentoviVpisi"] = student.Vpisis.OrderBy(v => v.letoVpisa);

                return View("VpisniListDodaj");
            }
            
            //azuriranje studentovih podatkov
            student.ime = form["ime"];
            student.priimek = form["priimek"];
            student.dpriimek=form["dpriimek"];
            student.hisnaSt = form["hisna"];
            student.ulica = form["ulica"];
            student.davcnaStevilka = Convert.ToDecimal(form["davcna"]);
            student.emso = Convert.ToDecimal(form["emso"]);
            student.email = form["email"];
            student.telefonskaSt = form["telefon"];
            student.datumRojstva = new DateTime(Convert.ToInt32(form["emso"].Substring(4, 3)) + 1000, Convert.ToInt32(form["emso"].Substring(2, 2)), Convert.ToInt32(form["emso"].Substring(0, 2)));
            decimal sp = Convert.ToDecimal(form["posta"].Substring(form["posta"].Length - 4));
            SPoste posta = db.SPostes.First(p => p.sPosta == sp);
            posta.Studentis.Add(student);
            //student.sPosta = posta.sPosta;

            string ob = form["obcina"];
            SObcine obcina = db.SObcines.First(o => o.imeObcina == ob);
            obcina.Studentis.Add(student);
            //student.sObcina = obcina.sObcina;

            string drz = form["drzava"];
            SDrzave drzava = db.SDrzaves.First(d => d.imeDrzava == drz);
            drzava.Studentis.Add(student);
            //student.sDrzava = drzava.sDrzava;

            //zacasne
            student.zacasnaUlica = null;
            if (form["ulicaZac"] != null && form["ulicaZac"].Length != 0)
                student.zacasnaUlica = form["ulicaZac"];
            student.zacasnaHisnaSt = null;
            if (form["hisnaZac"] != null && form["hisnaZac"].Length != 0)
                student.zacasnaHisnaSt = form["hisnaZac"];

            student.SOb_sObcina = null;
            if (form["obcinaZac"] != null && form["obcinaZac"].Length != 0)
            {
                string zacObc = form["obcinaZac"];
                SObcine obcinaZac = db.SObcines.First(o => o.imeObcina == zacObc);
                obcinaZac.Studentis1.Add(student);
                //student.SOb_sObcina = obcinaZac.sObcina;

            }

            student.SPo_sPosta = null;
            if (form["postaZac"] != null && form["postaZac"].Length != 0)
            {
                decimal spZac = Convert.ToDecimal(form["postaZac"].Substring(form["postaZac"].Length - 4));
                SPoste postaZac = db.SPostes.First(p => p.sPosta == spZac);
                postaZac.Studentis1.Add(student);
                //student.SPo_sPosta = postaZac.sPosta;
            }
            
            student.posebnaPotreba = form["posebne_potrebe"];
            ////////////////////////////////

            
            //dodajanje novega vpisa
            Vpisi vpis = new Vpisi();

            vpis.username = username;
            vpis.letoVpisa = new DateTime(Convert.ToInt32(form["studijsko_leto"]), 10, 1);
            vpis.skupina = form["skupine"];
            //ali se je uporabnik odlocil za dolocitev predmetnika
            string izbirniPredmetnikCheckBox = form["izbirniPredmetnikCheck"];
            vpis.seStudira = "ja";
            vpis.idVrstaStudija = form["vrsta_studija"];
            if (form["nacin_studija"].CompareTo("redni") == 0)
                vpis.redni = true;
            else
                vpis.redni = false;

            string sm = form["studijskiProgramSmer"];
            SSmeri smer = db.SSmeris.First(s => s.imeSmer == sm);
            smer.Vpisis.Add(vpis);//nastavimo tuji kljuc vpisu
            
            

            vpis.krajIzvajanja = form["kraj_studija"];
            vpis.zavod = form["dodatni_zavod"];

            string vrs = form["vrsta_vpisa"];
            VrsteVpisa vrsta = db.VrsteVpisas.First(v => v.opisVrste == vrs);
            vrsta.Vpisis.Add(vpis);


            string let = form["letnik_studija"];
            LetnikiStudija letnik = db.LetnikiStudijas.First(l => l.opisLetnika == let);
            letnik.Vpisis.Add(vpis);


            Vpisi dvojniVpis = db.Vpisis.FirstOrDefault(v=>v.letoVpisa.Year==vpis.letoVpisa.Year && v.sSmer == vpis.sSmer && v.username == vpis.username);

            if (dvojniVpis != null)
            {
                ViewData["uspeh"] = false;
                ViewData["odziv"] = "Vpis študent se ni shranil v bazo. Študent ima že zabeležen vpis leta "+vpis.letoVpisa.Year+" na smer "+vpis.SSmeri.imeSmer+".";
                return View("Odziv");
            }

            db.AddToVpisis(vpis);


            //povezat obvezne predmete z vpisom
            IEnumerable<sPredmeti> obvezniPredmeti = from o in db.ObvezenPredmets
                                                     join p in db.sPredmetis on o.sPredmeta equals p.sPredmeta
                                                     where o.idLetnikStudija == letnik.idLetnikStudija && o.sSmer == smer.sSmer && p.obvezni == true
                                                     select p;
            foreach (sPredmeti pred in obvezniPredmeti)
            {
                pred.Vpisis.Add(vpis);
                vpis.sPredmetis.Add(pred);
            }
            /////////////////////////////////////


            db.SaveChanges();

            ViewData["uspeh"] = true;

            ViewData["vpisna"] = student.username;
            ViewData["vpisid"] = vpis.idVpisa;

            if (izbirniPredmetnikCheckBox != null)
            {//potrebno dolocit se izbirni predmetnik, ce je checkan
                ViewData["moduli"] = moduli;
                ViewData["prosti"] = prostoIzbPredmeti;
                ViewData["strokovni"] = strokovnoIzbPredmeti;
                return View("IzbirniPredmetnik");
            }
            
            
            ViewData["odziv"] = "Vpis študenta "+student.ime+" "+student.priimek+" se je uspešno dodal v bazo";



            return View("Odziv");


        }


        //za vmesnik pri izbirnem predmetniku, ko klice jquery
        [AcceptVerbs(HttpVerbs.Post)]
        public string dobiPredmeteOdModula(FormCollection form)
        {

            string mod = form["selectModuli"];
            string sifraModula="";
            try
            {
                SModuli modul = db.SModulis.First(m => m.imeModula == mod);
                predmeti = from p in db.sPredmetis
                           where p.sModula == modul.sModula
                           select p;
                sifraModula=modul.sModula.ToString();

            }
            catch (Exception) { }

            string ret = "";
            if (predmeti != null)
            {
                foreach (var predmet in predmeti)
                    ret += predmet.imePredmeta + "<input type='hidden' name='"+ predmet.sPredmeta.ToString()+"'><br/>";
            }
            return ret;
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult ShraniIzbirniPredmetnik(FormCollection form)
        {
            decimal vpisid=Decimal.Parse(form["vpisid"]);
            string vpisna=form["studentid"];

            Vpisi izbranVpis = db.Vpisis.FirstOrDefault(v=>v.idVpisa == vpisid);

            izbranVpis.sPredmetis.Clear();//zbrisemo vse da damo na novo


            predmeti = from p in db.sPredmetis
                       select p;
            if (predmeti != null)
            {
                foreach (var p in predmeti)
                {
                    string sifraPred=p.sPredmeta.ToString();
                    if (form[sifraPred] != null)
                    {
                        if (!p.Vpisis.Contains(izbranVpis))
                        {
                            p.Vpisis.Add(izbranVpis);
                            izbranVpis.sPredmetis.Add(p);
                        }
                        else
                        {
                            ViewData["uspeh"] = false;
                            ViewData["odziv"] = "Predmet " + p.imePredmeta + " je trenutnemu študentu že dodeljen. Študent se ni uspešno posodobil v bazi.";
                            //ViewData["odziv"] = "Predmet " + p.imePredmeta + " iz modula je trenutnemu študentu že dodeljen. Preverite, če imate izbrana dva enaka modula. Študent se ni uspešno posodobil v bazi.";
                            return View("Odziv");
                        }
                    }
                }
            }
            try
            {
                //povezat obvezne predmete z vpisom
                IEnumerable<sPredmeti> obvezniPredmeti = from o in db.ObvezenPredmets
                                                         join p in db.sPredmetis on o.sPredmeta equals p.sPredmeta
                                                         where o.idLetnikStudija == izbranVpis.idLetnikStudija && o.sSmer == izbranVpis.sSmer && p.obvezni == true
                                                         select p;
                foreach (sPredmeti pred in obvezniPredmeti)
                {
                    pred.Vpisis.Add(izbranVpis);
                    izbranVpis.sPredmetis.Add(pred);
                }
                /////////////////////////////////////

                db.SaveChanges();
            }
            catch (Exception e)
            {

                ViewData["uspeh"] = false;
                ViewData["odziv"] = "Napaka pri vnosu baze. Ima že izbrane izbirne predmete pod svoj vpis. Študent se ni uspešno posodobil v bazi.";
                return View("Odziv");
            }

            ViewData["uspeh"] = true;
            ViewData["odziv"] = "Študent se je uspešno posodobil v bazi.";
            return View("Odziv");
        }

    }
}
